class Solution {

    // 第一个node 原始链表节点  第二个node 新链表的节点
    HashMap<Node, Node> map = new HashMap<>();

    public Node copyRandomList(Node head) {
        if (head == null) return null; // 特殊情况
        if (map.containsKey(head)) return map.get(head);
        Node node = new Node(head.val); // 创建新节点
        map.put(head, node); // 将其与旧节点的对应关系存储到map中
        node.next = copyRandomList(head.next);
        node.random = copyRandomList(head.random);
        return node;
    }
}